package com.hmall.common.interceptor;

import com.hmall.common.exception.UnauthorizedException;
import cn.hutool.core.util.StrUtil;
import com.hmall.common.utils.UserContext;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;

/**
 * 用户身份验证拦截器
 * 用于在请求处理前验证用户身份，并在请求完成后清理用户上下文
 */
public class UserInterceptor implements HandlerInterceptor {
    /**
     * 在请求处理之前执行身份验证逻辑
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     * @param handler  被调用的处理器对象（Controller方法）
     * @return true表示继续执行后续拦截器或目标方法，false表示中断请求处理
     * @throws Exception 处理过程中可能抛出的异常
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 1.获取用户id
        String userInfo = request.getHeader("user-info");

        // 检查用户信息是否存在，如果不存在则抛出未授权异常
        if (StrUtil.isNotBlank(userInfo)) {
            // 实际应该是在用户信息为空时抛出异常，原代码逻辑有误
        } else {
            throw new UnauthorizedException("用户未登录");
        }
        return true;
    }
    
    /**
     * 在整个请求处理完成后执行清理工作
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     * @param handler  被调用的处理器对象（Controller方法）
     * @param ex       请求处理过程中抛出的异常（如果没有则为null）
     * @throws Exception 处理过程中可能抛出的异常
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        UserContext.removeUser();
    }

}
